﻿#region Usings

using System;
using System.Xml.XPath;
using Yandex.Market.Api.YmlSerialization;

#endregion

namespace Yandex.Market.Api.Model
{
    /// <summary>
    ///   Внимание! <br />
    ///   В качестве разделителя целой и дробной частей любых чисел в YML, независимо от региональных установок, используется точка (не запятая!).<br />
    ///   При слишком значительном (больше 30%) отличии значения курса валюты от курса ЦБ РФ или НБУ информационные материалы считаются невалидными.<br />
    /// </summary>
    [YmlSerializeAs("currency")]
    [Serializable]
    public class Currency
    {
        /// <summary>
        ///   CBRF - курс по Центральному банку РФ.
        /// </summary>
        public const string CBRF = "CBRF";

        /// <summary>
        ///   NBU - курс по Национальному банку Украины.
        /// </summary>
        public const string NBU = "NBU";

        /// <summary>
        ///   NBK - курс по Национальному банку Казахстана.
        /// </summary>
        public const string NBK = "NBK";

        /// <summary>
        ///   СВ - курс по банку той страны, к которой относится магазин по Своему региону, указанному в Партнерском интерфейсе Яндекс.Маркета.
        /// </summary>
        public const string CB = "CB";

        /// <summary>
        /// </summary>
        public Currency()
        {
            Rate = "1";
        }

        /// <summary>
        ///   указывает код валюты
        /// </summary>
        [YmlSerializeAs("id")]
        [YmlAttributeForClass]
        [YmlAttributeOrder(0)]
        public YmlCurrencyId ID { get; set; }

        /// <summary>
        ///   Курс этой валюты к валюте, взятой за единицу. <br />
        ///   Параметр rate может иметь так же следующие значения: CBRF, NBU, NBK и CB.
        /// </summary>
        [YmlSerializeAs("rate")]
        [YmlAttributeForClass]
        [YmlAttributeOrder(10)]
        public string Rate { get; set; }

        /// <summary>
        ///   Надбавка в процентах у курсу национального банка.
        /// </summary>
        [YmlSerializeAs("plus")]
        [YmlAttributeForClass]
        [YmlAttributeOrder(20)]
        public uint? Plus { get; set; }

        internal static Currency CreateCurrencyFromXml(XPathNavigator nav)
        {
            Currency currency = new Currency();
            YmlCurrencyId currencyId;
            string id = nav.GetAttribute("id", "");
            if(!string.IsNullOrEmpty(id) && Enum.TryParse(id, out currencyId))
                currency.ID = currencyId;

            string rate = nav.GetAttribute("rate", "");
            if(!string.IsNullOrEmpty(rate))
                currency.Rate = rate;

            string plus = nav.GetAttribute("plus", "");
            uint iPlus;
            if(!string.IsNullOrEmpty(plus) && uint.TryParse(plus, out iPlus))
                currency.Plus = iPlus;

            return currency;
        }
    }
}